/*
 * @Author: yanbinbin
 * @Date: 2021-04-20 16:05:30
 * @LastEditTime: 2021-04-21 15:32:57
 * @LastEditors: Please set LastEditors
 * @Description: provider 使用详解
 * @FilePath: \provider_demo\lib\main.dart
 */

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_demo/comsumer_demo.dart';
import 'package:provider_demo/counter2_model.dart';
import 'package:provider_demo/counter_model.dart';
import 'package:provider_demo/provider_demo.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    // MultiProvider 以可注入多个资源
    return MultiProvider(
        providers: [
          Provider.value(value: 30.0),
          // ChangeNotifierProvider 为widget提供读写能力
          ChangeNotifierProvider.value(value: CounterModel()),
          ChangeNotifierProvider(create: (_) => CounterModel2())
        ],
        child: MaterialApp(
            title: 'Flutter Demo',
            theme: ThemeData(
              primarySwatch: Colors.blue,
            ),
            home: HomePage()));
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        body: TabBarView(
          children: [
            ConsumerTabPage1(),
            ProviderTabPage1(),
          ],
        ),
        bottomNavigationBar: TabBar(
          tabs: [
            Tab(
              icon: Icon(Icons.home),
              text: "Consumer",
            ),
            Tab(
              icon: Icon(Icons.rss_feed),
              text: "Provider",
            ),
          ],
          unselectedLabelColor: Colors.blueGrey,
          labelColor: Colors.blue,
          indicatorSize: TabBarIndicatorSize.label,
          indicatorColor: Colors.red,
        ),
      ),
    );
  }
}

// void main() {
//   runApp(
//     // MultiProvider 以可注入多个资源
//     MultiProvider(
//       providers: [
//         // ChangeNotifierProvider 为widget提供读写能力
//         ChangeNotifierProvider(create: (_) => Counter()),
//       ],
//       child: const MyApp(),
//     ),
//   );
// }

// class Counter with ChangeNotifier, DiagnosticableTreeMixin {
//   int _count = 0;

//   int get count => _count;

//   void increment() {
//     _count++;
//     notifyListeners();
//   }

//   @override
//   void debugFillProperties(DiagnosticPropertiesBuilder properties) {
//     super.debugFillProperties(properties);
//     properties.add(IntProperty('count', count));
//   }
// }

// class MyApp extends StatelessWidget {
//   const MyApp({Key? key}) : super(key: key);

//   @override
//   Widget build(BuildContext context) {
//     return const MaterialApp(
//       home: MyHomePage(),
//     );
//   }
// }

// class MyHomePage extends StatelessWidget {
//   const MyHomePage({Key? key}) : super(key: key);

//   @override
//   Widget build(BuildContext context) {
//     return Scaffold(
//       appBar: AppBar(
//         title: const Text('Example'),
//       ),
//       body: Center(
//         child: Column(
//           mainAxisSize: MainAxisSize.min,
//           mainAxisAlignment: MainAxisAlignment.center,
//           children: const <Widget>[
//             Text('You have pushed the button this many times:'),
//             Count(),
//           ],
//         ),
//       ),
//       floatingActionButton: FloatingActionButton(
//         key: const Key('increment_floatingActionButton'),
//         //
//         onPressed: () => context.read<Counter>().increment(),
//         tooltip: 'Increment',
//         child: TestIcon(),
//       ),
//     );
//   }
// }

// // class Count extends StatelessWidget {
// //   const Count({Key? key}) : super(key: key);

// //   @override
// //   Widget build(BuildContext context) {
// //     // watch发现Counter 发生改变小部件将重新生成
// //     return Text('${context.watch<Counter>().count}',
// //         key: const Key('counterState'),
// //         style: Theme.of(context).textTheme.headline4);
// //   }
// // }
// class Count extends StatelessWidget {
//   const Count({Key? key}) : super(key: key);

//   @override
//   Widget build(BuildContext context) {
//     // Consumer 可以精确地控制UI刷新粒度，使用builder模式创建UI，收到更新通知就会通过builder重新构建widget
//     // 当counter 对象发生改变时， 会从新构建小部件
//     /*
//      * @description:   Consumer 中的 builder 实际上就是真正刷新 UI 的函数，它接收 3 个参数
//      * @param context  是widget的builder方法传进来的上下文
//      * @param model    是我们需要的数据元
//      * @param child    是用来构建哪些于数据资源无关的部分
//      */
//     return Consumer<Counter>(
//       builder: (context, counter, child) {
//         return Text(counter.count.toString());
//       },
//       //   child: TestIcon(),
//     );
//   }
// }

// class TestIcon extends StatefulWidget {
//   const TestIcon({Key? key}) : super(key: key);

//   @override
//   _TestIconState createState() => _TestIconState();
// }

// class _TestIconState extends State<TestIcon> {
//   @override
//   Widget build(BuildContext context) {
//     print('TestIcon重建了');
//     return Icon(Icons.add);
//   }
// }
